import java.util.Arrays;

//栈的链式储存 栈的添加顺序是从下到上，没有插入这个说法，删除也就是出栈是从上到下
//严格遵循添加的顺序 对于固定大小的栈大小，可以使用头尾俩个top来增加空间利用率
//栈的应用有在四则表达是的运算也就是+-*/的先后顺序

//栈的链式储存 内存按需取用
class one<E> {
    static int DEFUALT = 5;
    private Object[] arr = new Object[DEFUALT];
    private int top = 0;//顶层

    private void is_full() {
        if (top == DEFUALT) {
            Object[] tmp = Arrays.copyOf(arr, 2 * DEFUALT);
            arr = tmp;
            DEFUALT *= 2;
        }
    }

    public void push(E val) {
        is_full();
        arr[top++] = val;
    }

    public void pop() {
        top--;
    }

    public int getTop() {
        return top;
    }
}

public class text_one {
    public static void main(String[] args) {
        one<Integer> h = new one<>();
        for (int i = 0; i < 10; i++) {
            h.push(i);
        }
        System.out.println(h.getTop());
        for (int i = 0; i < 10; i++) {
            h.pop();
        }
        System.out.println(h.getTop());
    }
}
